package com.example.mongodb.mongodb.controller.rabbitmq.delayedqueue;


import com.example.mongodb.mongodb.entity.User;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.io.UnsupportedEncodingException;

@RestController
public class PublishController {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @GetMapping("/prepare/{seconds}")
    public String toMeeting(@PathVariable Integer seconds) throws UnsupportedEncodingException {
        //rabbitmq 只会检查队列头部的消息是否过期，如果过期就放到死信队列
        //假如第一个过期时间很长，10s，第二个消息3s则系统先看第一个消息，等到第二个消息过期放到DLX
        //此时才会检查第二个消息，但实际上此时第二个消息早已经过期，但是并没有先鱼第一个消息放到dlx
        //插件 rabbitmq_delayed_message_exchange 帮我们搞定这个
         MessageProperties m  = MessagePropertiesBuilder.newInstance().setHeader("x-delay", (seconds - 10) * 1000).setContentEncoding("UTF-8").build();

         //传递一个对象
        User user = new User();
        user.setId(1);
        user.setName("TEST");
        user.setAge("12");

        Message message = MessageBuilder.withBody(user.toString().getBytes()).andProperties(m).build();
        rabbitTemplate.convertAndSend("ex.delayed","key-delayed",message);

        return "已经定义好了闹钟";





















    }
}
